package crm.benedicto.logica;
import crm.benedicto.beans.Permiso;
import crm.benedicto.beans.Rol;
import crm.benedicto.dao.ConnectionManager;
import crm.benedicto.dao.PermisoDAO;
import crm.benedicto.dao.RolDAO;
import crm.benedicto.excepciones.LogicaException;
import crm.benedicto.excepciones.PersistenException;
import crm.benedicto.views.AccesoModulo;
import java.util.List;
import java.util.Map;

public class RolLogica {    
    public boolean adicionar(Rol rol, List<Permiso> lsPermisos) throws LogicaException, PersistenException{
        boolean correcto = false;
        ConnectionManager cm = null;
        try{
            cm = new ConnectionManager();
            RolDAO rolDAO = new RolDAO(cm);
            if(rolDAO.bucarPorId(rol.getId())!=null){
                throw new LogicaException("Codigo de rol ya esta registrado");                
            }else if(lsPermisos.size()==0){
                throw new LogicaException("rol no tiene permiso");                
            }else{
                rolDAO.adicionar(rol);
                PermisoDAO permisoDAO = new PermisoDAO(cm);
                for(Permiso permiso:lsPermisos){
                    permisoDAO.adicionar(permiso);
                }                
            }            
        }catch(LogicaException e){
            throw e;
        }catch(PersistenException e){
            throw e;
        }
        finally{
            cm.close();                                    
        }
        return correcto;
    }
    
    public boolean editar(Rol rol, List<Permiso> lsPermisos) throws LogicaException, PersistenException{
        boolean correcto = false;
        ConnectionManager cm = null;
        try{
            cm = new ConnectionManager();
            RolDAO rolDAO = new RolDAO(cm);
            if(rolDAO.bucarPorId(rol.getId())==null){
                throw new LogicaException("Codigo de rol no existe");                
            }else if(lsPermisos.size()==0){
                throw new LogicaException("rol no tiene permiso");                
            }else{
                rolDAO.editar(rol);
                PermisoDAO permisoDAO = new PermisoDAO(cm);
                for(Permiso permiso:lsPermisos){
                    permisoDAO.editar(permiso);
                }                
            }            
        }catch(LogicaException e){
            throw e;
        }catch(PersistenException e){
            throw e;
        }
        finally{
            cm.close();                                    
        }
        return correcto;
    }
    
    public boolean eliminar(Rol rol) throws LogicaException, PersistenException{
        boolean correcto = false;
        ConnectionManager cm = null;
        try{
            cm = new ConnectionManager();
            RolDAO rolDAO = new RolDAO(cm);
            if(rolDAO.bucarPorId(rol.getId())==null){
                throw new LogicaException("Codigo de rol no existe");                            
            }else{
                rolDAO.eliminar(rol);
                PermisoDAO permisoDAO = new PermisoDAO(cm);
                permisoDAO.eliminar(rol.getId());
            }            
        }catch(LogicaException e){
            throw e;
        }catch(PersistenException e){
            throw e;
        }
        finally{
            cm.close();                                    
        }
        return correcto;
    }
    
    
    
}
